/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fonol.entidades;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Fredfred2
 */
@Entity
@SequenceGenerator(name="seqBen",allocationSize=1,initialValue=1,sequenceName="BENEFICIARIOS_SEQ")
@Table(name = "BENEFICIARIOS")
@NamedQueries({ @NamedQuery(name = "Beneficiarios.findByIdbeneficiario", query = "SELECT b FROM Beneficiarios b WHERE b.idbeneficiario = :idbeneficiario"), 
                @NamedQuery(name = "Beneficiarios.findByUsuarios", query = "SELECT g FROM Beneficiarios g WHERE g.usuario = :usuario"), 
                @NamedQuery(name = "Beneficiarios.findByEstado", query = "SELECT g FROM Beneficiarios g WHERE g.candidatos.estado = :estado"), 
                @NamedQuery(name = "Beneficiarios.findByFechaaceptacion", query = "SELECT b FROM Beneficiarios b WHERE b.fechaaceptacion = :fechaaceptacion")})
public class Beneficiarios implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(generator="seqBen",strategy=GenerationType.SEQUENCE)
    @Column(name = "IDBENEFICIARIO", nullable = false)
    private Integer idbeneficiario;
    @Column(name = "FECHAACEPTACION")
    @Temporal(TemporalType.DATE)
    private Date fechaaceptacion;
    
    @JoinColumn(name = "IDUSUARIO", referencedColumnName = "IDUSUARIO")
    @ManyToOne(cascade=CascadeType.ALL)
    private Usuarios usuario;
    
    @JoinColumn(name = "IDCANDIDATO", referencedColumnName = "IDCANDIDATO")
    @ManyToOne(fetch=FetchType.EAGER)
    private Candidatos candidatos;
        @OneToMany(mappedBy = "beneficiario")
    private Collection<Proyectos> proyectosCollection;

    public Beneficiarios() {
    }

    public Beneficiarios(Integer idbeneficiario) {
        this.idbeneficiario = idbeneficiario;
    }

    public Integer getIdbeneficiario() {
        return idbeneficiario;
    }

    public void setIdbeneficiario(Integer idbeneficiario) {
        this.idbeneficiario = idbeneficiario;
    }

    public Date getFechaaceptacion() {
        return fechaaceptacion;
    }

    public void setFechaaceptacion(Date fechaaceptacion) {
        this.fechaaceptacion = fechaaceptacion;
    }

    public Candidatos getCandidatos() {
        return candidatos;
    }

    public void setCandidatos(Candidatos idcandidato) {
        this.candidatos = idcandidato;
    }

    public Collection<Proyectos> getProyectosCollection() {
        return proyectosCollection;
    }

    public void setProyectosCollection(Collection<Proyectos> proyectosCollection) {
        this.proyectosCollection = proyectosCollection;
    }

    @Override
    public int hashCode() {
        Integer hash = 0;
        hash += (idbeneficiario != null ? idbeneficiario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Beneficiarios)) {
            return false;
        }
        Beneficiarios other = (Beneficiarios) object;
        if ((this.idbeneficiario == null && other.idbeneficiario != null) || (this.idbeneficiario != null && !this.idbeneficiario.equals(other.idbeneficiario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "fonol.entidades.Beneficiarios[idbeneficiario=" + idbeneficiario + "]";
    }

    public Usuarios getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuarios usuario) {
        this.usuario = usuario;
    }

}
